package com.own.component.store.core.method;

import com.own.component.store.core.method.base.BaseStore;
import org.springframework.stereotype.Component;

import java.time.Duration;

/**
 * StoreValue
 *
 * @author chenxueli
 * @date 2022-06-15 03:14:15
 */
@Component
public interface StoreValue<T> extends BaseStore {

    /**
     * 设置缓存
     *
     * @param name  缓存KEY
     * @param value 缓存内容
     */
    void set(String name, T value);

    /**
     * 设置缓存，指定过期时间
     *
     * @param name    缓存KEY
     * @param value   缓存内容
     * @param timeout 指定缓存过期时间（毫秒）
     */
    default void set(String name, T value, long timeout) {
        set(name, value, Duration.ofMillis(timeout));
    }

    /**
     * 设置缓存，指定过期时间
     *
     * @param name     缓存KEY
     * @param value    缓存内容
     * @param duration 指定缓存过期时间
     */
    void set(String name, T value, Duration duration);

    /**
     * 获取缓存
     *
     * @param name 缓存KEY
     * @return 缓存内容
     */
    T get(String name);

    /**
     * 类型名称
     *
     * @return 类型名称
     */
    @Override
    default String type() {
        return "value";
    }

}
